#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "math.h"
#include "stdio.h"
#include "stm32f10x_flash.h"
#include "stdlib.h"
#include "string.h"
#include "wdg.h"
#include "timer.h"
#include "stm32f10x_tim.h"
#include "EC200S.h"
#include "AHT20.h"
#include "stdint.h"
#define THINGS_IP "43.143.141.18"
#define THINGS_PORT "8080"
#define THINGS_TOKEN "58LMZDXVdYyTJmKobiQe"

extern char RxBuffer[100], RxCounter;
extern unsigned char uart2_getok;
void Get_Staus(void);
void temp_humi_json(char *json);
void request_body(char *request);
int getFlag(char *Buffer);

/***
控制EC200S发送TCP数据到服务器，参考历程，支持收
***/

// 适用于NB版本
int main(void)
{
	int flag;
	uint8_t t=0;                  // 用于计时
	char req[1024];
	uint8_t ret = 0; // 用于监测AHT20是否正常工作
	static u8 count = 0;
	delay_init();		  // 延时函数初始化
	NVIC_Configuration(); // 设置NVIC中断分组2:2位抢占优先级，2位响应优先级
	LED_Init();			  // 初始化与LED连接的硬件接口
	EC200SPWR_Init();	  // 对EC200S开机
	uart_init(115200);	  // 串口1初始化，打印到电脑调试助手
	uart2_init(115200);	  // 对接EC200S
	IWDG_Init(7, 625);	  // 8S一次
	PWRKEY = 1;			  // 对EC200S开机
	I2C_Bus_Init();		  // 初始化I2C总线
	ret = AHT20_Init();	  // 初始化AHT20
	if (ret == 0)		  // AHT20初始化失败
	{
		while (1)
		{
			Uart1_SendStr("AHT20传感器初始化错误\n");
			delay_ms(300);
		}
	}
	EC200S_Init();			  // 对设备初始化
	EC200S_CreateTCPSokcet(); // 创建一个SOCKET连接
	while (1)				  
	{
		char request1[200];
		if(t%100==0){
		request_body(req); // 生成请求体
		printf("%s",req); // 发数据，透传直接用printf即可，不要用指令模式了
	
		}
		//delay_ms(100);
		// LEDStatus = !LEDStatus;
		//IWDG_Feed();	 // 喂狗
		
		 if(t%400==0){
		LEDStatus = !LEDStatus;
		 IWDG_Feed();	 // 喂狗
    	sprintf(request1, "GET /api/v1/%s/attributes?clientKeys=switch HTTP/1.1\r\n"
                      "Host: %s:%s\r\n"
                   "\r\n",
           THINGS_TOKEN, THINGS_IP, THINGS_PORT);
		 printf("%s", request1);
		 }
		 //delay_ms(10);
		 //t=0;
	//	if(t%800==0){//250ms遥测一次
	 //  request_mybody(req1); // 生成请求体
		// printf("%s", req1); // 发数据，透传直接用printf即可，不要用指令模式了
		//}
		 delay_ms(10);
		t++;
		delay_ms(1000);
	
		 if (uart2_getok) // 接收到服务器的数据下发
		{
			Uart1_SendStr("服务器下发数据:");
			Uart1_SendStr(RxBuffer);
			if (getFlag(RxBuffer))
			{
				
				Uart1_SendStr("获取1成功");
				LED1=1;//关灯
				
			}else{
				Uart1_SendStr("获取0成功");
				LED1=0;//开灯
			}
			
			RxCounter = 0;
			uart2_getok = 0;
		}
		delay_ms(1000);
		Get_Staus(); // 判断服务器是否断开
	}
}

void Get_Staus(void)
{
	char *strx;
	strx = strstr((const char *)RxBuffer, (const char *)"NO CARRIER"); //
	if (strx)														   // 识别到服务器关闭
	{
		while (1)
		{
			Uart1_SendStr("服务器连接异常，将重启自动连接功能\r\n");
			delay_ms(500);
		}
	}
}

void temp_humi_json(char *json)
{
	int humi, temp;
	uint32_t CT_data[2];
	/* 读取 AHT20 传感器数据*/
	while (AHT20_Read_Cal_Enable() == 0)
	{
		AHT20_Init(); // 如果为0再使能一次
		delay_ms(30);
	}
	AHT20_Read_CTdata(CT_data);
	humi = CT_data[0] * 1000 / 1024 / 1024;			  // 计算湿度
	temp = CT_data[1] * 200 * 10 / 1024 / 1024 - 500; // 计算温度
	humi = humi / 10;
	temp = temp / 10;
	sprintf(json, "{\"temperature\":\"%d\", \"humidity\":\"%d\"}", temp, humi);
	// printf("***************************\n");
	// printf("AHT20温湿度传感器测试数据:\n");
	// printf("温度: %d.%d ℃\n", (temp / 10), (temp % 10));
	// printf("湿度: %d.%d %%\n", (humi / 10), (humi % 10));
	// printf("\n");
}

void request_body(char *request)
{
	char json[50];
	temp_humi_json(json);
	sprintf(request, "POST /api/v1/%s/attributes HTTP/1.1\r\n"
					 "Host: %s:%s\r\n"
					 "Content-Type: application/json\r\n"
					 "Content-Length: %d\r\n"
					 "\r\n"
					 "%s\r\n",
			THINGS_TOKEN, THINGS_IP, THINGS_PORT, strlen(json), json);
			
}



int getFlag(char *Buffer)
{
	char flag;
	Buffer+=183;
	flag=* Buffer;
	if(flag-'0'==0){
		return 0;
	}
	if (flag-'0'==1)
	{
		return 1;
	}
}


